home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FishMarket 1.0
/
FishMarket v1.0.iso
/
fishies
/
276-300
/
disk_297
/
clean
/
clean.asm
< prev
next >
Wrap
Assembly Source File
|
1992-05-06
|
8KB
|
242 lines
****************************************************************************
* *** Clean V1.0 (c) 1989 By Dan Burris *** *
* *
* This is a program to clean your Floppy diskettes, it has protection from *
* trying to write to anything other than DF something, and only 0 thru 3, *
* and then only if that drive is connected to the Amiga that it is running *
* on. *
* *
* I hereby declare this program to be in the Public domain. You may use *
* in your programs including commercial or whatever, as long as you do not *
* use it maliciously, or blame ME for any of it's failures, or misgivings! *
****************************************************************************
**** Equates and Offsets ****
OpenLibrary EQU -408
CloseLibrary EQU -414
ExecBase EQU 4
**** Amiga Dos Calls ****
Open EQU -30
Close EQU -36
OpenDevice EQU -444
CloseDevice EQU -450
SendIO EQU -462
Delay EQU -198
Read EQU -42
Write EQU -48
WaitForCh EQU -204
mode_old EQU 1005
OutPut EQU -60
Exit EQU -144
Lock EQU -84
run:
move.l d0,d4 ;save length of Parameter
move.l a0,a1 ;save Parameter address
move.l #whodisk,a5 ;address of drive name in a5
getit move.b (a1)+,(a5)+ ;save Parameter in whodisk
dbra d0,getit ;until all in whodisk
cmpi.b #4,d4 ;was Parameter - df#:?
bne Template ;tell user how to use, & exit
bsr init ;Initialization-Open stuff
bra ScreenOut ;Print Msgs, and work
init: ;System initialization and Open
move.l ExecBase,a6 ;Pointer to EXEC-library
move.l #dosname,a1 ;Dos Library name in a1
moveq #0,d0 ;Version # = don't care
jsr OpenLibrary(a6) ;Open DOS-Library
move.l d0,dosbase ;Save the Address of the Dos
beq Clean1 ;Bad open - set flag, and exit
OpenTrkDsk:
lea diskio,a1 ;Pointer to I/0 structure in a1
move.l #diskrep,14(a1) ;Address of I/O Port in A1 + 14
move.l #whodisk,a5 ;Address of drive name in a5
clr.l d0 ;Clear d0 to do byte operation
move.b 2(a5),d0 ;Put ascii drive number in d0
sub.b #$30,d0 ;Convert to Actual Drive Number
cmpi.b #4,d0 ;Too Large of drive number?
bge Template ;Tell user to start over
clr.l d1 ;No Flags
move.l #trddevice,a0 ;Put device name in a0
jsr OpenDevice(a6) ;Open trackdisk.device
tst.l d0 ;Was it a good Open?
bne BadDrive ;If so,Bad Drive Number-Exit
RawOpen:
lea RAWname(pc),a1 ;RAW-Definition
move.l #mode_old,d0 ;The Mode you use
bsr Openfile ;RAW Open
beq CleanUp ;Error handling routine
move.l d0,rawhandle ;Save the address of the Window
rts
Template:
move.l ExecBase,a6 ;Pointer to EXEC-library
move.l #dosname,a1 ;Dos Library name in a1
moveq #0,d0 ;Version # = don't care
jsr OpenLibrary(a6) ;Open DOS-Library
move.l d0,dosbase ;save DOS address
move.l dosbase,a6 ;Address of the Dos->A6
jsr OutPut(a6) ;get CLI window handle
move.l d0,d1 ;save CLI handle
lea TempMsg(pc),a0 ;Start of the message
move.l #TempMsg1,d3 ;End of message to print
bsr print2 ;Routine to print message above
jsr Exit(a6) ;Exit program!
ScreenOut:
lea message(pc),a0 ;Start of the message
move.l #message1,d3 ;End of message to print
bsr print ;Routine to print message above
NoRemove:
move.l ExecBase,a6 ;Start of Exec Library in a6
lea diskio,a1 ;Pointer to I/O Structure in A1
move.l #0,40(a1) ;To shut off disk remove spin
move.l 32(a1),d7 ;IO_ACTUAL in d7
move #12,28(a1) ;Command = Toggle motor on/off
move.l #1,36(a1) ;Turn DFO disk drive motor on!
move.l #1,d0 ;Drive #1
jsr SendIO(a6) ;Send the command to the drive
GetKey:
move.l #inbuff,d2 ;Address of Input Buffer
move.l #1,d3 ;Number of characters to read
move.l dosbase,a6 ;Find Dos Library
move.l rawhandle,d1 ;The Place to get keypress from
jsr Read(a6) ;Get 1 character
move.b inbuff,d0 ;Put it in d0
moveq #$1b,d4 ;ESC character in d4
cmp.b d4,d0 ;Was it ESC key?
beq CleanUp ;If so close Libraries and Exit
moveq #$0d,d4 ;Return character in d4
cmp d4,d0 ;Was it Return?
bne GetKey ;Bad input, start over.
MotorOn:
lea MotorMsg(pc),a0 ;Address of MotorMsg in a0
move.l #MotorMsg1,d3 ;Address of end of MotorMsg
bsr print ;Print it
move.l ExecBase,a6 ;Start of Exec Library in a6
lea diskio,a1 ;Pointer to I/O Structure in A1
move.l 32(a1),d7 ;IO_ACTUAL in d7
move #9,28(a1) ;Command = Toggle motor on/off
move.l #1,36(a1) ;Turn DFO disk drive motor on!
move.l #1,d0 ;Drive #1
jsr SendIO(a6) ;Send the command to the drive
move.l #750,d1 ;Delay() parameter - 15 seconds
jsr Wait ;Wait 15 secs. while spinning
MotorOff:
move.l ExecBase,a6 ;Start of Exec Library in a6
lea diskio,a1 ;Pointer to I/O Structure in A1
move.l 32(a1),d7 ;IO_ACTUAL in d7
move #9,28(a1) ;Command = Toggle motor on/off
move.l #0,36(a1) ;Turn DFO disk drive motor off!
jsr SendIO(a6) ;Send the command to the drive
bra CleanUp ;Close Libraries and exit
CleanUp:
move.l rawhandle,d1 ;Handle to RAW
move.l dosbase,a6 ;Dos Library Close
jsr Close(a6) ;Close Window
Clean1:
move.l dosbase,a1 ;DOS.Lib Close
move.l ExecBase,a6 ;Address of Exec in a6
jsr CloseLibrary(a6) ;Close Dos Library
Clean2:
lea diskio,a1 ;Address of Trackdisk
move.l 32(a1),d7 ;IO_ACTUAL in d7
jsr CloseDevice(a6) ;Close TrackDisk Device
rts
BadDrive:
move.l ExecBase,a6 ;Pointer to EXEC-library
move.l #dosname,a1 ;Dos Library name in a1
moveq #0,d0 ;Version # = don't care
jsr OpenLibrary(a6) ;Open DOS-Library
move.l d0,dosbase ;save DOS address
move.l dosbase,a6 ;Address of the Dos->A6
jsr OutPut(a6) ;get CLI window handle
move.l d0,d1 ;save CLI handle
lea BadMsg(pc),a0 ;Start of the message
move.l #BadMsg1,d3 ;End of message to print
bsr print2 ;Routine to print message above
jsr Exit(a6) ;Exit program!
Openfile: ;Open File
move.l a1,d1 ;I/O Pointer - Filename
move.l d0,d2 ;Mode for the Open
move.l dosbase,a6 ;Address of Dos in A6
jsr Open(a6) ;Open the file
tst.l d0 ;Was it a good open?
rts
print:
move.l rawhandle,d1 ;Output Window in D1
print2: move.l a0,d2 ;Address of Text in d2
move.l dosbase,a6 ;Address of Dos in A6
jsr Write(a6) ;Write Message to Window
rts
Wait:
move.l dosbase,a6 ;Find the Dos Library
jsr Delay(a6) ;Wait 30 seconds(drive spins)
rts
RAWname: dc.b 'RAW:65/35/490/120/'
dc.b ' Dan',$27,'s Drive Cleaner V1.0 ',0
message:
dc.b $0c,$0a,$0d,$9b,'7;32;43m'
dc.b $9b,'15C'
dc.b $20,$20,' The Drive Cleaner ',$20,$20
dc.b $0a,$0d,$9b,'0m'
dc.b $9b,'15C'
dc.b $9b,'7;32;43m'
dc.b $20,$20,$20,'© 1988 By Dan Burris ',$20,$20,$20
dc.b $0a,$0a,$0a,$0d,$9b,'0;31;40m'
dc.b ' Please Insert a Prepared Cleaning Disk in '
dc.b $9b,'4;31;40mDrive '
whodisk ds.b 4
dc.b $0a,$0d,$0a,$0d
dc.b $9b,'0;31;40m'
dc.b ' And Press Return (Or Press Esc to Exit). '
dc.b $9b,$30,$20,$70
message1 EQU *-message
MotorMsg dc.b $0a,$0a,$0a,$0d
dc.b $9b,'0;32;40m *** '
dc.b $9b,'0;4;33;40mWorking'
dc.b $9b,'0;32;40m ***'
MotorMsg1 EQU *-MotorMsg
BadMsg dc.b 'That Drive is Not Connected to this Amiga!',$0d,$0a
BadMsg1 EQU *-BadMsg
TempMsg dc.b 'Please Type -> Clean [DF0,DF1,DF2, or DF3]',$0d,$0a
TempMsg1 EQU *-TempMsg
dosname: dc.b 'dos.library',0,0
cnop 0,2
trddevice: dc.b 'trackdisk.device',0
cnop 0,2
dosbase: dc.l 0 ;DOS base address
rawhandle: dc.l 0 ;Window Handle
inbuff: ds.b 8 ;Keyboard Buffer
diskio: ds.l 20 ;I/O Structure
diskrep: ds.l 8 ;I/O Port
end